<?xml version="1.0" encoding="utf-8" ?>
<!-- [FRH:14.04.09] ajout du tag InterchangeableMinors pour l'element Class -->
<!-- [CHD:13.04.22] le tag CustomerExposition de l'element Simple disparait -->
<xs:schema xmlns:tns="PLMDictionaryCore" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="PLMDictionaryCore" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="Package">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:CAAComment" />
      <xs:element ref="tns:Class" />
      <xs:element ref="tns:RelationClass" />
      <xs:element ref="tns:Comment" />
      <xs:element ref="tns:Extension" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Property" />
      <xs:element ref="tns:Enum" />
      <xs:element ref="tns:Function" />
      <xs:element name="Signature" type="tns:FuncSignature" />
      <xs:element ref="tns:PathType" />
      <xs:element ref="tns:AttributeMask" />
      <xs:element ref="tns:Category" />
      <xs:element minOccurs="0" ref="tns:Interface" />
      <xs:element ref="tns:Mask" />
      <xs:element ref="tns:SecurableClass" />
      <xs:element ref="tns:ApplicationService" />
      <xs:element ref="tns:ApplicationServiceReference" />
    </xs:choice>
    <!-- Name of the package: must be unique -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!--Indicates if this packages contains elements that are public (known by customer through UI or customization tools) or pure private modeling elements -->
    <!--None means private -->
    <!--Programmer means public -->
    <xs:attribute name="CustomerExposition" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates the kind of package: customer (Specialization or Deployment) or DS (Top or Core) -->
    <xs:attribute name="ModelerType">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Core" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this package is a sub package of another one (in the UI, we will present only the super one) -->
    <xs:attribute name="BelongsToModeler" type="xs:string" />
    <!--Contains the list of packages where we will find necessary definitions used in this package -->
    <xs:attribute name="UseNames" type="xs:string" />
    <!-- Indicates the name of the icon associated to the package-->
    <xs:attribute name="IconName" type="xs:string"/>
    <!-- Indicates the list of Providers which are supposed to support the Package definitions -->
    <xs:attribute name="SupportedByProviders" type="xs:string"/>
    <!--For a package defining procedures, defines the list of packages where we will find necessary procedures used in this package -->
    <xs:attribute name="UseScopes" type="xs:string" />
    <!-- Indicates if a package is deprecated (should not be seen anymore): in this case, all content of the package is deprecated-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--obsolete: we should get rid of this -->
    <xs:attribute name="ModelerName" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Alias" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="DataRDB_OID" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Domain">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="CATIA" />
          <xs:enumeration value="ENOVIA" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="ExpositionLevel" type="xs:string" />
  <!--Indicates in which architecture the schema will be used: by default, it will be web if not defined-->
  <xs:attribute name="Architecture">
    <xs:simpleType>
      <xs:restriction base="xs:NMTOKEN">
        <xs:enumeration value="Web"/>
        <xs:enumeration value="Native"/>
        <xs:enumeration value="All"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>  
  </xs:complexType>
  <xs:element name="Package" type="tns:Package" />

  <!-- Description Class: defines a type of object in the database -->
  <xs:complexType name="Class">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Property" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Simple" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Volatile" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Relationship" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:InterfaceImplementation" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Inverse" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Unique" />
      <xs:element minOccurs="0" ref="tns:IdentifierSet" />
      <xs:element ref="tns:ApplicationServiceReference" />
      <xs:element ref="tns:Method" />
    </xs:choice>
    <!--Name of the class: must be unique-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required"/>
    <!--Indicates if the class can be used to create objects: abstract=No-->
    <xs:attribute name="Abstract">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this class is public (known by customer through UI or customization tools) or is a pure private one-->
    <!--Modification 2015x: adding ProgrammerOnly to indicate a public type but not shown in UI-->
    <xs:attribute name="CustomerExposition" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
          <xs:enumeration value="ProgrammerOnly" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Defines the class, this class inherits from-->
    <xs:attribute name="SuperName" type="xs:string" />
    <!-- Still used but not strategic: defines the exposition of the class to 3DXML 4.3 -->
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports Major revisionning: used by wintop life cycle commands UI -->
    <xs:attribute name="NewMajorRevisionAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports Minor revisionning: used by wintop life cycle commands UI -->
    <xs:attribute name="NewMinorRevisionAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports mechanism of evolutions: used by wintop life cycle commands UI -->
    <xs:attribute name="EvolutionAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports mechanism of iterations: used by server side iteration mechanism -->
    <xs:attribute name="IterationAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports change maturity:used by wintop life cycle commands UI -->
    <xs:attribute name="ChangeMaturityAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports duplication: used by wintop life cycle commands UI-->
    <xs:attribute name="DuplicateAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports delete: used by wintop life cycle commands UI-->
    <xs:attribute name="DeleteAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports lock/unlock: used by wintop life cycle commands UI-->
    <xs:attribute name="LockUnlockAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports transfer of ownership: used by wintop life cycle commands UI-->
    <xs:attribute name="TransferOwnershipAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports edit properties: used by wintop UI-->
    <xs:attribute name="EditPropertiesAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports save as new: used by Wintop propagate UI-->
    <xs:attribute name="SaveAsNewAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports manage access (can drive the access rights of objects aggregated under it like design workspace)-->
    <xs:attribute name="ManageAccessAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports manage to be shared between projects: used by Wintop life cycle operations toolbox-->
    <xs:attribute name="ShareBetweenProjectsAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports to be changed of project (aka collaborative space)-->
    <xs:attribute name="ChangeCollaborativeSpaceAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if the minor versions of an object of this type can be replaced by one another: ce mot clef s'herite-->
    <xs:attribute name="InterchangeableMinors">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class carries pointers: not used yet-->
    <xs:attribute name="CarryPointers">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class carries streams: used when importing data (for instance from XPDM) to decide what to do with streams-->
    <xs:attribute name="CarryStreams">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <!-- Supports streams but there is no precision on the number of streams. Corresponds to 0 to many streams -->
          <xs:enumeration value="Yes"  />
          <!-- Does not support streams -->
          <xs:enumeration value="No" />
          <!-- Requires one stream and only one -->
          <xs:enumeration value="One" />
          <!-- Requires one stream at least -->
          <xs:enumeration value="One_At_Least" />
          <!-- Maximum is one -->
          <xs:enumeration value="One_Or_Zero" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class aggregates components: not used yet-->
    <xs:attribute name="AggregatesComponents">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports update stamp: not used yet-->
    <xs:attribute name="IsSynchronizable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class supports to have a unique key: used by DMA (Data model administration tool)-->
    <xs:attribute name="UniqueNamingRule">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class is indexable/searchable: used by the crawler and by win advanced search-->
    <xs:attribute name="Searchable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class has a nature of Independent, Aggregated or SubComponent: see dedicated documentation -->
    <xs:attribute name="ObjectNature">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Independent" />
          <xs:enumeration value="Aggregated" />
          <xs:enumeration value="SubComponent" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class is configurable: can own a variability space with configuration options -->
    <xs:attribute name="Configurable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class can be controlled by eengineering change actions-->
    <xs:attribute name="ChangeManagementSupport">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Valid only for Connection (structured/not_structured) -->
    <xs:attribute name="Structured">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class is deprecated (should not be seen anymore)-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Alias" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="CAA_Derivable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
          <xs:enumeration value="Unknown" />
          <xs:enumeration value="Multiple" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="ExpositionLevel" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Extensible">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="LogicalIdentification">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Explicit" />
          <xs:enumeration value="Implicit" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Persistent">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="PLMCoreType">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="PLM">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="SuperRef" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Visibility">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Public" />
          <xs:enumeration value="Protected" />
          <xs:enumeration value="Private" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Class" type="tns:Class" />

  <!-- Description of an extension type: is a set of attributes (and a types) that can be added on the fly on an object of a given type -->
  <xs:complexType name="Extension">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Property" />
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Simple" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Relationship" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Inverse" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Unique" />
      <xs:element minOccurs="0" ref="tns:IdentifierSet" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:InterfaceImplementation" />
      <xs:element ref="tns:ApplicationServiceReference" />
    </xs:choice>
    <!--Name of the extension: must be unique-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required"/>
    <!--Indicates if the extension can be used to really extend objects: Abstract=No-->
    <xs:attribute name="Abstract">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Still used but not strategic: defines the exposition of the extension to 3DXML 4.3 -->
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this extension is public (known by customer through UI or customization tools) or is a pure private one-->
    <!--Modification 2015x: adding ProgrammerOnly to indicate a public type but not shown in UI-->
    <xs:attribute name="CustomerExposition" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
          <xs:enumeration value="ProgrammerOnly" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- list of classes (or relation classes) that can be extended by this extension -->
    <xs:attribute name="ScopeNames" type="xs:string" />
    <!-- extension from which the current extension inherit -->
    <xs:attribute name="SuperName" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="ScopeRefs" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="SuperRef" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Visibility">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Public" />
          <xs:enumeration value="Protected" />
          <xs:enumeration value="Private" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Alias" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="CAA_Derivable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
          <xs:enumeration value="Unknown" />
          <xs:enumeration value="Multiple" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="ExpositionLevel" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Extensible">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="LogicalIdentification">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Explicit" />
          <xs:enumeration value="Implicit" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Persistent">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="PLMCoreType">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="PLM">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Extension" type="tns:Extension" />

  <!-- Description of standard persistent attributes -->
  <xs:complexType name="Simple">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Property" />
      <xs:element ref="tns:CAAComment" />
      <xs:element ref="tns:Comment" />
      <xs:element ref="tns:Range" />
      <xs:element ref="tns:ApplicationServiceReference" />
    </xs:choice>
    <!-- Name of the attribute: must be unique inside the scope of the class/relation class/extension where it is defined -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required"/>
    <!-- Still used but not strategic: defines the exposition of the class to 3DXML 4.3 -->
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Type of value -->
    <xs:attribute name="Type" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Boolean" />
          <xs:enumeration value="Integer" />
          <xs:enumeration value="Double" />
          <xs:enumeration value="Logical" />
          <xs:enumeration value="String" />
          <xs:enumeration value="Binary" />
          <xs:enumeration value="Clob" />
          <xs:enumeration value="Date" />
          <xs:enumeration value="Enumeration" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--is attribute multi valuated?: correspond to a list of values -->
    <xs:attribute name="MultiValuated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates if this attribute will be considered as Faceted in search (seen as a discrete list of values) -->
    <xs:attribute name="Faceted">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates if this attribute is PLM impacting: means that if it is modified, the update stamp of the owner of the attribute is modified -->
    <xs:attribute name="PLMImpacting" default="No" >
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--default value of the attribute -->
    <xs:attribute name="DefaultValue" type="xs:string" />
    <!--max length for a string attribute -->
    <xs:attribute name="MaxLength" type="xs:string" />
    <!--magnitude of a real attribute: list of possible values is defined in CATCkeMagnitudes file  -->
    <xs:attribute name="Magnitude" type="xs:string" />
    <!--defines both the visibility of the attribute (public/private) and who controls it  -->
    <!--Private means private: not seen from user and controlled by the modeler only. Can not be get or set by anybody else-->
    <!--Internal means private: not seen from user and controlled by the modeler. It cannot be read or set by anybody except the modeler. The modeler may provide some access -->
    <!--InternalRO means private to the server -->
    <!--External means public but under the control of the modeler and computed by the modeler. It is read only from a user perspective -->
    <!--ExternalRO means public but under the control of the server. It is read only from a user perspective -->
    <!--ExternalIN means public but under the control of the modeler. It is read write from a user perspective -->
    <!--Free means public and without any control from the modeler. It is read write from a user perspective -->
    <xs:attribute name="Protection" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Internal" />
          <xs:enumeration value="InternalRO" />
          <xs:enumeration value="User" />
          <xs:enumeration value="Free" />
          <xs:enumeration value="External" />
          <xs:enumeration value="ExternalRO" />
          <xs:enumeration value="ExternalIN" />
          <xs:enumeration value="Private" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates that the attribute will be reset during cloning operation  -->
    <xs:attribute name="ResetOnCloning">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--indicates that the attribute will be reset during revision operation  -->
    <xs:attribute name="ResetOnNewVersion">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Is the attribute defined once and cannot be modified afterwards?: for date and string attributes. Default is No -->
    <xs:attribute name="SetOnlyOnce">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="AtCreation"/>
          <xs:enumeration value="Later"/>
          <xs:enumeration value="No"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- For External/ExternalRO/ExternalIN/Free attributes, we can restrict the access in the UI. By defaut, it is deduced from protection -->
    <xs:attribute name="UIAccess">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None"/>
          <xs:enumeration value="ReadOnly"/>
          <xs:enumeration value="ReadWrite"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an attribute is deprecated (should not be seen anymore)-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates what is the default manipulation unit to use-->
    <xs:attribute name="ManipulationUnit" type="xs:string"/>
    <!-- SIXW predicate: how the attribute will be mapped in 6W tagger / Indexer  -->
    <xs:attribute name="SIXW" type="xs:string"/>
    <!-- Controller: C++ class that controls list of authorized values for an attribute -->
    <xs:attribute name="Controller" type="xs:string"/>
    <!-- multiline: indicates if the attribute (a string) must be presented with a multi line editor -->
    <xs:attribute name="multiline" type="xs:string"/>
    <!--drives the behavior of attributes when excchanged with briefcase: No means that they cannot be modified in extended enterprise exchanges  -->
    <xs:attribute name="ExtendedEnterprise">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="No" />
          <xs:enumeration value="Yes" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- DoesNotChangeCEStamp : There are few attributes that do not change CEStamp. By default should not be used -->
    <xs:attribute name="DoesNotChangeCEStamp">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="CaseMode">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Lower" />
          <xs:enumeration value="Upper" />
          <xs:enumeration value="Mixed" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="CategoryNames" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="CategoryRefs" type="xs:string" />
    <!-- Obsolete: all multi valuated attributes are ordered as a List. Notion of Set is not used -->
    <xs:attribute name="CollectionType">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Set" />
          <xs:enumeration value="List" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="CustomerExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- bientot ... -->
	<xs:attribute name="Default" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="DefaultValueName" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="DefaultValueRef" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="ExpositionLevel" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Lower" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Mandatory">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Persistent" use="optional">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="ResetValue" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="ResetValueName" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="ResetValueRef" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Sensitive" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="TargetName" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="TargetRef" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Upper" type="xs:string" />
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Visibility">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Public" />
          <xs:enumeration value="Protected" />
          <xs:enumeration value="Private" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="AccessMode">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="ReadWrite" />
          <xs:enumeration value="None" />
          <xs:enumeration value="Read" />
          <xs:enumeration value="Write" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Obsolete: kept for being able to read N-1 metadata -->
    <xs:attribute name="Alias" type="xs:string" />
  </xs:complexType>
  <xs:element name="Simple" type="tns:Simple" />

  <!-- Description of volatile attribute: is a pure programming language notion. No persistency behind this -->
  <xs:complexType name="Volatile">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:Property" />
    </xs:sequence>
    <!-- name of the attribute as it will be used in EKL  -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- obsolete: not used  -->
    <xs:attribute name="Uuid" type="xs:string" />
    <!-- C++ class that is able to compute the attribute value in read mode (and even write mode) on the rich client  -->
    <xs:attribute name="Accessor" type="xs:string" use="required" />
    <!-- Java class that is able to compute the attribute value in read mode (and even write mode) on the server -->
    <xs:attribute name="ServerAccessor" type="xs:string" />
    <!-- EKL data type: Boolean, Integer, Real, String, or Magnitude  -->
    <xs:attribute name="TypeName" type="xs:string" use="required" />
    <!-- Indicates if this attribute is only computed (read only) or can be used in both mode (read write)  -->
    <xs:attribute name="AccessMode" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="ReadOnly" />
          <xs:enumeration value="ReadWrite" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Volatile" type="tns:Volatile" />

  <!-- Obsolete: was used to generate a documentation in CAA. May be replaced by NLS declarations  -->
  <xs:complexType name="CAAComment">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:ShortRole" />
      <xs:element ref="tns:Role" />
    </xs:choice>
  </xs:complexType>
  <xs:element name="CAAComment" type="tns:CAAComment" />
  
  <!-- Obsolete: was used to generate a documentation in CAA. May be replaced by NLS declarations  -->
  <xs:complexType name="ShortRole" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded" />
  </xs:complexType>
  <xs:element name="ShortRole" type="tns:ShortRole" />


  <!-- Obsolete: was used to generate a documentation in CAA. May be replaced by NLS declarations  -->
  <xs:complexType name="Role" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded" />
  </xs:complexType>
  <xs:element name="Role" type="tns:Role" />
  
  <xs:element name="Comment" type="xs:string" />

  <!-- Property that can be added on any object: is a couple name/value -->
  <xs:complexType name="Property">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Comment" />
    </xs:choice>
    <!-- Name of the property  -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- Value of the property  -->
    <xs:attribute name="Value" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Property" type="tns:Property" />

  <!-- SubClause of a RelationClass: defines the possible types for the "to" and the "from" -->
  <xs:complexType name="SubClause">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Comment" />
    </xs:choice>
    <!-- Name must be equal to "to" or "from"-->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- Name of the types that can be used for such a sub clause, separated by ; -->
    <xs:attribute name="TargetName" type="xs:string" use="required" />
    <!-- Cardinality: expresses how many relations of the same type can be put on the to side or from side of an object. By default it is many-->
    <xs:attribute name="cardinality">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Many" />
          <xs:enumeration value="One" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- meaning is a free string that was used to describe the meaning of the to or the from. Is may be seen as a redundancy with SIXW-->
    <xs:attribute name="meaning" type="xs:string"/>
    <!-- expresses how the relationship will behave when the object referenced is revised. The relation may be duplicated, or it may float to the new revision, or it may stay as is. The default is stay as is (none)-->
    <xs:attribute name="minorrevision">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="none" />
          <xs:enumeration value="float" />
          <xs:enumeration value="replicate" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- expresses how the relationship will behave when the object referenced is cloned. The relation may be duplicated, or it may float to the duplicate object revision, or it may stay as is. The default is stay as is (none)-->
    <xs:attribute name="clone">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="none" />
          <xs:enumeration value="float" />
          <xs:enumeration value="replicate" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- expresses if the modification of the relation will propagate its modification stamp to the pointed. The default being no-->
    <xs:attribute name="propagatemodify">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="No" />
          <xs:enumeration value="Yes" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- expresses if the addition of such a relation (or the removal) will update the modification stamp of the pointed element. Default being No-->
    <xs:attribute name="propagateconnection">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="No" />
          <xs:enumeration value="Yes" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="SubClause" type="tns:SubClause" />

  <!-- Description of a relation class: it is a type that leads to the creation of objects, that models a relation between 2 objects -->
  <xs:complexType name="RelationClass">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Comment"/>
      <xs:element ref="tns:CAAComment"/>
      <xs:element ref="tns:Simple"/>
      <xs:element ref="tns:Volatile"/>
      <xs:element ref="tns:Property"/>
      <xs:element ref="tns:SubClause"/>
      <xs:element ref="tns:Method"/>
    </xs:choice>
    <!--Name of the relation class: must be unique-->
    <xs:attribute name="Name" type="xs:string" default="No" />
    <!--Used by MQL generator to identify a type uniquely-->
    <xs:attribute name="Uuid" type="xs:string" use="required" />
    <!--Indicates if the relation class can be used to create objects (Abstract=No) -->
    <xs:attribute name="Abstract" default="No">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--Indicates if this relation class is public (known by customer through UI or customization tools) or is a pure private one-->
    <!--Modification 2015x: adding ProgrammerOnly to indicate a public type but not shown in UI-->
    <xs:attribute name="CustomerExposition" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
          <xs:enumeration value="ProgrammerOnly" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Defines the relation class, this relation class inherits from-->
    <xs:attribute name="SuperName" type="xs:string"/>
    <!-- Indicates if a relation class supports delete-->
    <xs:attribute name="DeleteAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports lock/unlock-->
    <xs:attribute name="LockUnlockAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports transfer ownership-->
    <xs:attribute name="TransferOwnershipAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports edit properties-->
    <xs:attribute name="EditPropertiesAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports manage access (can drive the access rights of objects aggregated under it like design workspace)-->
    <xs:attribute name="ManageAccessAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports manage to be shared between projects-->
    <xs:attribute name="ShareBetweenProjectsAvailability">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class carries pointers-->
    <xs:attribute name="CarryPointers">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a class carries streams: used when importing data (for instance from XPDM) to decide what to do with streams-->
    <xs:attribute name="CarryStreams">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <!-- Supports streams but there is no precision on the number of streams. Corresponds to 0 to many streams -->
          <xs:enumeration value="Yes"  />
          <!-- Does not support streams -->
          <xs:enumeration value="No" />
          <!-- Requires one stream and only one -->
          <xs:enumeration value="One" />
          <!-- Requires one stream at least -->
          <xs:enumeration value="One_At_Least" />
          <!-- Maximum is one -->
          <xs:enumeration value="One_Or_Zero" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class aggregates components-->
    <xs:attribute name="AggregatesComponents">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class supports update stamp-->
    <xs:attribute name="IsSynchronizable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class has a nature of Aggregation, Instanciation, Pointer or Association -->
    <xs:attribute name="RelationNature">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Aggregation" />
          <xs:enumeration value="Instanciation" />
          <xs:enumeration value="Pointer" />
          <xs:enumeration value="Association" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if a relation class is filtrable (through configuration effectivities)-->
    <xs:attribute name="Filtrable">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Still used but not strategic: defines the exposition of the class to 3DXML 4.3 -->
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Indicates if an extension is deprecated (should not be seen anymore)-->
    <xs:attribute name="Deprecated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="RelationClass" type="tns:RelationClass" />
  
  <!-- Description of a path type: this concept can be reused by some relationships   -->
  <xs:complexType name="PathType">
    <xs:choice maxOccurs="unbounded">
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element ref="tns:Property" />
      <xs:element ref="tns:Simple"/>
    </xs:choice>
    <!-- Name of the path: equivalent of a name of an attribute   -->
    <xs:attribute name="Name" type="xs:string" use="required" />
    <!-- Defines the super pathtype this pathtype inherits from: to reuse attributes declaration-->
    <xs:attribute name="SuperName" type="xs:string"/>
    <!--Indicates if the class can be used to create objects: abstract=No-->
    <xs:attribute name="Abstract" default="No"/>
    <!-- Probably obsolete   -->
    <xs:attribute name="Uuid" type="xs:string" />
    <!-- Indicates if this attribute contains one or several paths  -->
    <xs:attribute name="MultiValuated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Adaptative to minor: yes means that the SR will reconnect to the current/best minor in session   -->
    <!-- Adaptative to minor: no means that the SR will stubbornly reference the minor on which it has been created  -->
    <!-- Should be necessary when RoleName is not valuated -->
    <xs:attribute name="AdaptativeToMinor" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Describes the behavior expected when the target object changes its effectivity: Yes means that the SR is supposed to be duplicated when the instance is split   -->
    <xs:attribute name="RerouteOnEffectivityChange" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Describes the sensitivity to update stamp of the pointed object   -->
    <xs:attribute name="SynchroSensitivity" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Last" />
          <xs:enumeration value="PathAndLast" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- Orientation: Neutral means that the "link" is not oriented   -->
    <!-- Orientation: In means that the pointed is in input (impacts) of the owner of the path   -->
    <!-- Orientation: Out means that the pointed is impacted by the owner of the path   -->
    <!-- Orientation: InOut means that the impacts are in both sides    -->
    <!-- If not precised, considered as Neutral    -->
    <!-- Should be necessary when RoleName is not valuated -->
    <xs:attribute name="Orientation" >
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Neutral" />
          <xs:enumeration value="In" />
          <xs:enumeration value="Out" />
          <xs:enumeration value="InOut" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!--defines both the visibility of the attribute (public/private) and who controls it  -->
    <!--Internal means private: not seen from user and controlled by the modeler -->
    <!--External means public but under the control of the modeler and computed by the modeler. It is read only from a user perspective -->
    <!--Free means public and without any control from the modeler. It is read write from a user perspective -->
    <xs:attribute name="Protection">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Internal"/>
          <xs:enumeration value="Free"/>
          <xs:enumeration value="External"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <!-- a list of Types to which the PathType can refer -->
    <xs:attribute name="TargetNames" type="xs:string" />
    <!-- The types that can aggregate such a path type   -->
    <xs:attribute name="OwnerTypes" type="xs:string" />
    <!-- SIXW predicate: how the SR, will be mapped in 6W tagger / Indexer  -->
    <xs:attribute name="SIXW" type="xs:string"/>
  </xs:complexType>
  <xs:element name="PathType" type="tns:PathType" />

  <!-- Description of a Range: a range is a constraing for the values of an attribute  -->
  <xs:complexType name="Range">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:Property" />
      <xs:element ref="tns:Comment" />
      <xs:element ref="tns:Equal" />
      <xs:element ref="tns:NotEqual" />
      <xs:element ref="tns:LessThan" />
      <xs:element ref="tns:LessThanEqual" />
      <xs:element ref="tns:GreaterThan" />
      <xs:element ref="tns:GreaterThanEqual" />
      <xs:element ref="tns:Between" />
      <xs:element ref="tns:Program" />
    </xs:choice>
  </xs:complexType>
  <xs:element name="Range" type="tns:Range" />
  <!-- Constraint of equality: contains the value   -->
  <xs:element name="Equal" type="xs:string" />
  <!-- Constraint of inequality: contains the value   -->
  <xs:element name="NotEqual" type="xs:string" />
  <!-- Constraint of less than a value: contains the value   -->
  <xs:element name="LessThan" type="xs:string" />
  <!-- Constraint of less than or equal to a value: contains the value   -->
  <xs:element name="LessThanEqual" type="xs:string" />
  <!-- Constraint of greater than a value: contains the value   -->
  <xs:element name="GreaterThan" type="xs:string" />
  <!-- Constraint of greater than or equal a value: contains the value   -->
  <xs:element name="GreaterThanEqual" type="xs:string" />
  <!-- Constraint of between two values   -->
  <xs:complexType name="Between">
    <xs:choice>
      <xs:element maxOccurs="1" name="Min" type="xs:string" />
      <xs:element maxOccurs="1" name="MinEqual" type="xs:string" />
      <xs:element maxOccurs="1" name="Max" type="xs:string" />
      <xs:element maxOccurs="1" name="MaxEqual" type="xs:string" />
    </xs:choice>
  </xs:complexType>
  <xs:element name="Between" type="tns:Between" />
  <!-- Constraint modeled by a program that is executed   -->
  <xs:complexType name="Program">
    <!-- name of the program that is executed   -->
    <xs:attribute name="Name" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Program" type="tns:Program" />

  <!-- TO SUPPORT NEW TYPING WAITING FOR ENUM MIGRATION: PREFER RANGES -->
  <xs:complexType name="Enum">
    <xs:choice>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Property" />
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element maxOccurs="unbounded" ref="tns:Enumerator" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="CustomerExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Programmer" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Type" use="optional">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Boolean" />
          <xs:enumeration value="Integer" />
          <xs:enumeration value="Double" />
          <xs:enumeration value="Logical" />
          <xs:enumeration value="String" />
          <xs:enumeration value="Date" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Enum" type="tns:Enum" />
  <xs:complexType name="Enumerator">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:ApplicationServiceReference" />
      <xs:element ref="tns:CAAComment" />
      <xs:element ref="tns:Comment" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Value" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Enumerator" type="tns:Enumerator" />

  <!-- FOR BEHAVIORAL DICTIONARY -->
  <xs:complexType name="Method">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="tns:ProcedureForUsage" />
      <xs:element minOccurs="1" maxOccurs="1" name="RealizeMethodType" type="tns:MethodTypeHref" />
    </xs:choice>
    <xs:attribute name="ImplementationType" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Self" />
          <xs:enumeration value="AsFather" />
          <xs:enumeration value="None" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Method" type="tns:Method" />
  <xs:complexType name="MethodTypeHref">
    <xs:attribute name="href" type="xs:string" />
  </xs:complexType>
  <xs:complexType name="ProcedureForUsage">
    <xs:choice minOccurs="1" maxOccurs="2">
      <xs:element minOccurs="1" maxOccurs="1" name="UsedProcedure" type="tns:ProcedureHref" />
      <xs:element minOccurs="1" maxOccurs="1" name="Usage" type="tns:UsageHref" />
    </xs:choice>
  </xs:complexType>
  <xs:element name="ProcedureForUsage" type="tns:ProcedureForUsage" />
  <xs:complexType name="ProcedureHref">
    <xs:attribute name="href" type="xs:string" />
  </xs:complexType>
  <xs:complexType name="UsageHref">
    <xs:attribute name="href" type="xs:string" />
  </xs:complexType>
  <xs:complexType name="Function">
    <xs:choice minOccurs="1" maxOccurs="unbounded">
      <xs:element minOccurs="1" ref="tns:Implementation" />
      <xs:element minOccurs="1" maxOccurs="1" name="Signature" type="tns:SignatureHref" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Function" type="tns:Function" />
  <xs:complexType name="SignatureHref">
    <xs:attribute name="href" type="xs:string" />
  </xs:complexType>
  <xs:complexType name="Implementation">
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="FileLocation" type="xs:string" use="required" />
    <xs:attribute name="Language" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="EKL" />
          <xs:enumeration value="PLMQL" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Implementation" type="tns:Implementation" />
  <xs:complexType name="FuncSignature">
    <xs:choice minOccurs="1" maxOccurs="unbounded">
      <xs:element name="Parameter" type="tns:FuncParameter" />
    </xs:choice>
    <xs:attribute name="id" type="xs:string" />
  </xs:complexType>
  <xs:complexType name="FuncParameter">
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Lower" type="xs:integer" />
    <xs:attribute name="Upper" type="xs:integer" />
    <xs:attribute name="Direction" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="in" />
          <xs:enumeration value="out" />
          <xs:enumeration value="inout" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="MultiValuated" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="DataType" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Boolean" />
          <xs:enumeration value="Integer" />
          <xs:enumeration value="Double" />
          <xs:enumeration value="String" />
          <xs:enumeration value="Date" />
          <xs:enumeration value="PLMId" />
          <xs:enumeration value="PLMRouteSet" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>



  <!-- Will be Obsolete after instance type mapping project will be activated -->
  <xs:complexType name="Relationship">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Property" />
      <xs:element ref="tns:CAAComment" />
      <xs:element ref="tns:Comment" />
      <xs:element ref="tns:ApplicationServiceReference" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="AccessMode">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="ReadWrite" />
          <xs:enumeration value="Read" />
          <xs:enumeration value="Write" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute default="Edit" name="BehaviorControlSensitive">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Edit" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="CategoryNames" type="xs:string" />
    <xs:attribute name="CategoryRefs" type="xs:string" />
    <xs:attribute name="CollectionType">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Set" />
          <xs:enumeration value="Bag" />
          <xs:enumeration value="List" />
          <xs:enumeration value="Array" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="ExpositionLevel" type="xs:string" />
    <xs:attribute name="Injective">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Lower" type="xs:string" />
    <xs:attribute name="Mandatory">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="MaxLength" type="xs:string" />
    <xs:attribute name="MultiValuated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Persistent" use="optional">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute default="Weak" name="PLMIntegrity">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Weak" />
          <xs:enumeration value="Strong" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Scope">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Internal" />
          <xs:enumeration value="Path" />
          <!-- <xs:enumeration value="External" /> [chd:16.10.2013] pas utilisé   -->
          <xs:enumeration value="Vault" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="ScopeRefs" type="xs:string" />
    <xs:attribute name="Semantics">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Unknown" />
          <xs:enumeration value="IsInstanceOf" />
          <xs:enumeration value="Reference" />
          <xs:enumeration value="Reference2" />
          <xs:enumeration value="Reference3" />
          <xs:enumeration value="Reference4" />
          <xs:enumeration value="Reference5" />
          <xs:enumeration value="Reference6" />
          <xs:enumeration value="Reference7" />
          <xs:enumeration value="Composition" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Sensitive" type="xs:string" />
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" />
    <xs:attribute name="Type">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="String" />
          <xs:enumeration value="Binary" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Upper" type="xs:string" />
    <xs:attribute name="Visibility">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Public" />
          <xs:enumeration value="Protected" />
          <xs:enumeration value="Private" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Relationship" type="tns:Relationship" />
  
  
  <xs:complexType name="Inverse">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Property" />
      <xs:element ref="tns:CAAComment" />
      <xs:element ref="tns:Comment" />
      <xs:element ref="tns:ApplicationServiceReference" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="AccessMode">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="ReadWrite" />
          <xs:enumeration value="Read" />
          <xs:enumeration value="Write" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute default="None" name="BehaviorControlSensitive">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="None" />
          <xs:enumeration value="Edit" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="CAAExposition">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="L0" />
          <xs:enumeration value="L1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="CategoryNames" type="xs:string" />
    <xs:attribute name="CategoryRefs" type="xs:string" />
    <xs:attribute name="CollectionType">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Set" />
          <xs:enumeration value="Bag" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="ExpositionLevel" type="xs:string" />
    <xs:attribute name="InverseOfName" type="xs:string" />
    <xs:attribute name="InverseOfRef" type="xs:string" use="required" />
    <xs:attribute name="Lower" type="xs:string" />
    <xs:attribute name="Mandatory">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="MultiValuated">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Persistent" use="optional">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Scope">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Internal" />
          <xs:enumeration value="Path" />
          <xs:enumeration value="External" />
          <xs:enumeration value="Vault" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Semantics">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Unknown" />
          <xs:enumeration value="IsInstanceOf" />
          <xs:enumeration value="Reference" />
          <xs:enumeration value="Reference2" />
          <xs:enumeration value="Reference3" />
          <xs:enumeration value="Reference4" />
          <xs:enumeration value="Reference5" />
          <xs:enumeration value="Reference6" />
          <xs:enumeration value="Reference7" />
          <xs:enumeration value="Composition" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Sensitive" type="xs:string" />
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" />
    <xs:attribute name="Upper" type="xs:string" />
    <xs:attribute name="Visibility">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Public" />
          <xs:enumeration value="Protected" />
          <xs:enumeration value="Private" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Inverse" type="tns:Inverse" />
  
  
  <xs:complexType name="Category">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="Group" type="xs:string" />
  </xs:complexType>
  <xs:element name="Category" type="tns:Category" />
  
  <xs:complexType name="Unique">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="CategoryNames" type="xs:string" />
    <xs:attribute name="CategoryRefs" type="xs:string" />
    <xs:attribute name="UniqueNames" type="xs:string" />
    <xs:attribute name="UniqueRefs" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Unique" type="tns:Unique" />
  
  <xs:complexType name="Mask">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:UsingAttributeMask" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="Operation" type="xs:string" use="required" />
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Mask" type="tns:Mask" />
  
  <xs:complexType name="AttributeMask">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="Default" type="xs:string" />
    <xs:attribute name="DefaultName" type="xs:string" />
    <xs:attribute name="DefaultRef" type="xs:string" />
    <xs:attribute name="HelpName" type="xs:string" />
    <xs:attribute name="HelpRef" type="xs:string" />
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" use="required" />
    <xs:attribute name="ValidRefs" type="xs:string" />
  </xs:complexType>
  <xs:element name="AttributeMask" type="tns:AttributeMask" />
  
  <xs:complexType name="UsingAttributeMask">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="AccessMode">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="ReadWrite" />
          <xs:enumeration value="None" />
          <xs:enumeration value="Read" />
          <xs:enumeration value="Write" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="Mandatory">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" use="required" />
    <xs:attribute name="Order" type="xs:string" />
  </xs:complexType>
  <xs:element name="UsingAttributeMask" type="tns:UsingAttributeMask" />
  
  <xs:complexType name="IdentifierSet">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="IdentifierNames" type="xs:string" />
    <xs:attribute name="IdentifierUuids" type="xs:string" />
  </xs:complexType>
  <xs:element name="IdentifierSet" type="tns:IdentifierSet" />
  
  <xs:complexType name="Interface">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:Simple" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element maxOccurs="unbounded" ref="tns:Service" />
      <xs:element ref="tns:ApplicationServiceReference" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="SuperRef" type="xs:string" />
    <xs:attribute name="SuperName" type="xs:string" />
  </xs:complexType>
  <xs:element name="Interface" type="tns:Interface" />
  
  <xs:complexType name="Service">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:InputParameters" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:OutputParameters" />
      <xs:element minOccurs="0" ref="tns:ReturnParameter" />
      <xs:element ref="tns:ApplicationServiceReference" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="SecurityPattern">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Modify" />
          <xs:enumeration value="Create" />
          <xs:enumeration value="Browse" />
          <xs:enumeration value="Delete" />
          <xs:enumeration value="Query" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="LicenceOption">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="WriteAccess">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="Service" type="tns:Service" />
  
  <xs:complexType name="InputParameters">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:SimpleParameter" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:RelationshipParameter" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="InputParameters" type="tns:InputParameters" />
  <xs:complexType name="OutputParameters">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:SimpleParameter" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:RelationshipParameter" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="OutputParameters" type="tns:OutputParameters" />
  <xs:complexType name="ReturnParameter">
    <xs:choice>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:choice>
        <xs:element ref="tns:SimpleParameter" />
        <xs:element ref="tns:RelationshipParameter" />
      </xs:choice>
    </xs:choice>
  </xs:complexType>
  <xs:element name="ReturnParameter" />
  <xs:complexType name="SimpleParameter">
    <xs:choice>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="MaxLength" type="xs:string" />
    <xs:attribute name="Type" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Boolean" />
          <xs:enumeration value="Integer" />
          <xs:enumeration value="Double" />
          <xs:enumeration value="Logical" />
          <xs:enumeration value="String" />
          <xs:enumeration value="Binary" />
          <xs:enumeration value="Date" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="SimpleParameter" type="tns:SimpleParameter" />
  <xs:complexType name="RelationshipParameter">
    <xs:choice>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="Alias" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" use="required" />
    <xs:attribute name="TargetName" type="xs:string" />
  </xs:complexType>
  <xs:element name="RelationshipParameter" type="tns:RelationshipParameter" />
  <xs:complexType name="InterfaceImplementation">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:ServiceOverload" />
    </xs:sequence>
    <xs:attribute name="TargetName" type="xs:string" use="required" />
    <xs:attribute name="TargetRef" type="xs:string" />
  </xs:complexType>
  <xs:element name="InterfaceImplementation" type="tns:InterfaceImplementation" />
  <xs:complexType name="ServiceOverload">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
    </xs:sequence>
    <xs:attribute name="ServiceUuid" type="xs:string" />
    <xs:attribute name="ServiceName" type="xs:string" />
    <xs:attribute name="SecurityPattern">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Modify" />
          <xs:enumeration value="Create" />
          <xs:enumeration value="Browse" />
          <xs:enumeration value="Delete" />
          <xs:enumeration value="Query" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="ServiceOverload" type="tns:ServiceOverload" />


  <xs:complexType name="SecurableClass">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:SecurableAttribute" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="SecurableClass" type="tns:SecurableClass" />
  <xs:complexType name="SecurableAttribute">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" ref="tns:CAAComment" />
      <xs:element ref="tns:ApplicationServiceReference" />
    </xs:choice>
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="xs:string" />
    <xs:attribute default="No" name="Secured">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="SecurableAttribute" type="tns:SecurableAttribute" />
  <xs:complexType name="Operation">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:ClassOperation" />
    </xs:sequence>
    <xs:attribute name="Uuid" type="xs:string" use="optional" />
    <xs:attribute name="Name" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="Operation" type="tns:Operation" />
  <xs:complexType name="ClassOperation">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:AttributeOperation" />
    </xs:sequence>
    <xs:attribute name="Uuid" type="xs:string" use="optional" />
    <xs:attribute name="Name" type="xs:string" use="optional" />
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" use="required" />
  </xs:complexType>
  <xs:element name="ClassOperation" type="tns:ClassOperation" />
  <xs:complexType name="AttributeOperation">
    <xs:sequence>
      <xs:element minOccurs="0" ref="tns:Comment" />
    </xs:sequence>
    <xs:attribute name="Uuid" type="xs:string" use="optional" />
    <xs:attribute name="Name" type="xs:string" use="optional" />
    <xs:attribute name="TargetName" type="xs:string" />
    <xs:attribute name="TargetRef" type="xs:string" use="required" />
    <xs:attribute name="Download">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="AttributeOperation" type="tns:AttributeOperation" />
  <xs:complexType name="ApplicationServiceReference">
    <xs:attribute name="ApplicationServiceRef" type="xs:string" use="required" />
    <xs:attribute name="Creation" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:NMTOKEN">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>
  <xs:element name="ApplicationServiceReference" type="tns:ApplicationServiceReference" />
  <xs:complexType name="ApplicationService">
    <xs:complexContent mixed="false">
      <xs:extension base="tns:DicElement">
        <xs:attribute name="ReleaseLevel" type="xs:string" use="required" />
        <xs:attribute name="Comment" type="xs:string" use="optional" />
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:element name="ApplicationService" type="tns:ApplicationService" />
  <xs:complexType name="DicElement">
    <xs:attribute name="Name" type="xs:string" use="required" />
    <xs:attribute name="Uuid" type="tns:UuidString" />
  </xs:complexType>
  <xs:simpleType name="UuidString">
    <xs:restriction base="xs:string">
      <xs:pattern value="((([0-9]|[a-f])|[A-F]){8,8}\-(([0-9]|[a-f])|[A-F]){4,4}\-(([0-9]|[a-f])|[A-F]){4,4}\-(([0-9]|[a-f])|[A-F]){16,16})|((([0-9]|[a-f])|[A-F]){8,8}\-(([0-9]|[a-f])|[A-F]){4,4}\-(([0-9]|[a-f])|[A-F]){4,4}\-(([0-9]|[a-f])|[A-F]){4,4}\-(([0-9]|[a-f])|[A-F]){12,12})" />
    </xs:restriction>
  </xs:simpleType>
  
  
   <!-- PROPERTIES -->

</xs:schema>

